import datetime
import time
import os
import tornado
import tornado.options
from tornado.web import RequestHandler


'''
set_cookie(name, value, domain=None, expires=None, path='/', expires_days=None)
    name	cookie名
    value	cookie值
    domain	提交cookie时匹配的域名
    path	提交cookie时匹配的路径
    expires	cookie的有效期，可以是时间戳整数、时间元组或者datetime类型，为UTC时间
    expires_days	cookie的有效期，天数，优先级低于expires
'''


#设置cookie
class IndexHandler(RequestHandler):
    def get(self):
        self.set_cookie("n1", "v1")
        self.set_cookie("n2", "v2", path="/new", expires=time.strptime("2016-11-11 23:59:59", "%Y-%m-%d %H:%M:%S"))
        self.set_cookie("n3", "v3", expires_days=20)
        # 利用time.mktime将本地时间转换为UTC标准时间
        self.set_cookie("n4", "v4", expires=time.mktime(time.strptime("2016-11-11 23:59:59", "%Y-%m-%d %H:%M:%S")))
        self.write("OK")

#获取 cookie
'''
get_cookie(name, default=None)
获取名为name的cookie，可以设置默认值。
'''
class IndexHandler01(RequestHandler):
    def get(self):
        n3 = self.get_cookie("n3")
        self.write(n3)

#清除cookie
'''
clear_cookie(name, path='/', domain=None)
删除名为name，并同时匹配domain和path的cookie。
clear_all_cookies(path='/', domain=None)
删除同时匹配domain和path的所有cookie。

注意：执行清除cookie操作后，并不是立即删除了浏览器中的cookie，而是给cookie值置空，
并改变其有效期使其失效。真正的删除cookie是由浏览器去清理的。
'''
class ClearAllCookieHandler(RequestHandler):
    def get(self):
        self.clear_all_cookies()
        self.write("OK")


#set_secure_cookie(name, value, expires_days=30)
#设置一个带签名和时间戳的cookie，防止cookie被伪造。
#get_secure_cookie(name, value=None, max_age_days=31)
#如果cookie存在且验证通过，返回cookie的值，
#否则返回None。max_age_day不同于expires_days，expires_days是设置浏览器中cookie的有效期，而max_age_day是过滤安全cookie的时间戳。
class IndexHandler03(RequestHandler):
    def get(self):
        #设置的cookie值会自动加密到浏览器之中！
        cookie = self.get_secure_cookie("count")
        count = int(cookie) + 1 if cookie else 1
        self.set_secure_cookie("count", str(count))
        self.write(
            '<html><head><title>Cookie计数器</title></head>'
            '<body><h1>您已访问本页%d次。</h1>' % count +
            '</body></html>'
        )

current_path = os.path.dirname(os.path.dirname(__file__))
app = tornado.web.Application(
    [
        (r'^/$', IndexHandler),
        (r'/1',IndexHandler01),
        (r'/3',IndexHandler03)
    ],
    cookie_secret = "2hcicVu+TqShDpfsjMWQLZ0Mkq5NPEWSk9fi0zsSt3A="
)

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()


'''
    fb417e45fe0559fa8210e03b07054df64e901b3adef562badd704e4656785b88
    
    "2|1:0|10:1476412069|5:count|4:NQ==|cb5fc1d4434971de6abf87270ac33381c686e4ec8c6f7e62130a0f8cbe5b7609"
    安全cookie的版本，默认使用版本2，不带长度说明前缀
    默认为0
    时间戳
    cookie名
    base64编码的cookie值
    签名值，不带长度说明前缀
    
    
    
    
>>> import base64, uuid
>>> base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes)
'2hcicVu+TqShDpfsjMWQLZ0Mkq5NPEWSk9fi0zsSt3A='
'''